package com.agenda.controller;

import com.agenda.model.Usuario;

public class UsuarioController extends DefaultController<Usuario> {

	private static UsuarioController INSTANCIA;

	private UsuarioController() {
		super("usuarios.dat");
	}

	public Boolean efetuarLogin(Usuario usuario) {
		try {
			semaforo.DOWN();

			Usuario usuarioBanco = buscarUsuario(usuario.getLoginEmail());

			if (usuarioBanco != null && usuarioBanco.compararLogin(usuario)) {
				return true;
			}

			return false;
		} finally {
			semaforo.UP();
		}
	}

	private Usuario buscarUsuario(String loginEmail) {
		for (Usuario usuarioBanco : getRegistrosSemSemaforo()) {
			if (usuarioBanco.getLoginEmail().equals(loginEmail))
				return usuarioBanco;
		}
		return null;
	}

	@Override
	protected void preGravacao(Usuario model) {
		if (verificarSeUsuarioExiste(model)) {
			throw new RuntimeException("Usuário já cadastrado.");
		}
	}

	private boolean verificarSeUsuarioExiste(Usuario model) {
		return buscarUsuario(model.getLoginEmail()) != null;
	}

	public static UsuarioController getInstancia() {
		if (INSTANCIA == null)
			INSTANCIA = new UsuarioController();

		return INSTANCIA;
	}
}
